package com.ruoyi.exam.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.exam.domain.ExamUserPracticeRecord;
import com.ruoyi.exam.vo.BankQuestionPracticeInfoVo;
import com.ruoyi.exam.vo.BankWrongQuestionInfoVo;
import com.ruoyi.exam.vo.BankProgressInfoVo;
import com.ruoyi.exam.vo.ExamUserPracticeRecordVo;

import java.util.List;

/**
 * 用户刷题记录Service接口
 *
 * @author Tellsea
 * @date 2025-06-23
 */
public interface IExamUserPracticeRecordService extends IService<ExamUserPracticeRecord> {

    /**
     * 分页查询
     *
     * @param entity
     * @return
     */
    TableDataInfo<ExamUserPracticeRecordVo> queryList(ExamUserPracticeRecordVo entity);

    /**
     * 查询全部
     *
     * @param entity
     * @return
     */
    List<ExamUserPracticeRecordVo> queryAll(ExamUserPracticeRecordVo entity);

    /**
     * 根据ID查询
     *
     * @param recordId
     * @return
     */
    ExamUserPracticeRecordVo queryById(Long recordId);

    /**
     * 根据用户ID和题库ID查询练习记录
     *
     * @param userId 用户ID
     * @param bankId 题库ID
     * @return
     */
    List<ExamUserPracticeRecordVo> getByUserIdAndBankId(Long userId, Long bankId);

    /**
     * 获取用户题库的题目答题情况和进度信息
     *
     * @param userId 用户ID
     * @param bankId 题库ID
     * @return 题库题目答题情况信息
     */
    BankQuestionPracticeInfoVo getBankQuestionPracticeInfo(Long userId, Long bankId);

    /**
     * 获取用户题库的错题信息
     *
     * @param userId 用户ID
     * @param bankId 题库ID
     * @return 题库错题信息
     */
    BankWrongQuestionInfoVo getBankWrongQuestionInfo(Long userId, Long bankId);

    /**
     * 获取当前用户的所有题库的进度信息
     *
     * @param userId 用户ID
     * @return 所有题库的进度信息列表
     */
    List<BankProgressInfoVo> getAllBankProgressInfo(Long userId);

    /**
     * 重置用户在指定题库的刷题进度与记录
     *
     * @param userId 用户ID
     * @param bankId 题库ID
     * @return 是否成功
     */
    boolean resetBankProgress(Long userId, Long bankId);
}
